/*
	NounEnhancementWeapon.cpp
	(c)2008 Palestar Inc, Jeff Everett
*/


#include "Debug/Assert.h"
#include "Constants.h"
#include "NounShip.h"
#include "NounPlanet.h"
#include "GameContext.h"
#include "NounEnhancementWeapon.h"


IMPLEMENT_FACTORY( NounEnhancement_MaverickWeaponDamage, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_MaverickWeaponDamage, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_MaverickWeaponDamage::NounEnhancement_MaverickWeaponDamage()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,100000));
	m_enhancements.push_back(new Enhancement(ES_BEAM,MT_DAMAGE,100000));
}


// Minor Weapon ---------------------------------------------------------------//
IMPLEMENT_FACTORY( NounEnhancement_MinorWeaponAccelerator, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_MinorWeaponAccelerator, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_MinorWeaponAccelerator::NounEnhancement_MinorWeaponAccelerator()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,5));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,-5));
}

IMPLEMENT_FACTORY( NounEnhancement_MinorWeaponCooler, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_MinorWeaponCooler, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_MinorWeaponCooler::NounEnhancement_MinorWeaponCooler()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,5));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,-5));
}

IMPLEMENT_FACTORY( NounEnhancement_MinorWeaponMultiplexer, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_MinorWeaponMultiplexer, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_MinorWeaponMultiplexer::NounEnhancement_MinorWeaponMultiplexer()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,5));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,5));
}

IMPLEMENT_FACTORY( NounEnhancement_MinorWeaponCondenser, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_MinorWeaponCondenser, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_MinorWeaponCondenser::NounEnhancement_MinorWeaponCondenser()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,-5));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,-5));
}

// Limited Weapon ---------------------------------------------------------------//
IMPLEMENT_FACTORY( NounEnhancement_LimitedWeaponAccelerator, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_LimitedWeaponAccelerator, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_LimitedWeaponAccelerator::NounEnhancement_LimitedWeaponAccelerator()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,10));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,-10));
}

IMPLEMENT_FACTORY( NounEnhancement_LimitedWeaponCooler, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_LimitedWeaponCooler, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_LimitedWeaponCooler::NounEnhancement_LimitedWeaponCooler()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,10));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,-10));
}

IMPLEMENT_FACTORY( NounEnhancement_LimitedWeaponMultiplexer, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_LimitedWeaponMultiplexer, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_LimitedWeaponMultiplexer::NounEnhancement_LimitedWeaponMultiplexer()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,10));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,10));
}

IMPLEMENT_FACTORY( NounEnhancement_LimitedWeaponCondenser, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_LimitedWeaponCondenser, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_LimitedWeaponCondenser::NounEnhancement_LimitedWeaponCondenser()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,-10));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,-10));
}

// Standard Weapon ---------------------------------------------------------------//
IMPLEMENT_FACTORY( NounEnhancement_StandardWeaponAccelerator, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_StandardWeaponAccelerator, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_StandardWeaponAccelerator::NounEnhancement_StandardWeaponAccelerator()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,15));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,-15));
}

IMPLEMENT_FACTORY( NounEnhancement_StandardWeaponCooler, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_StandardWeaponCooler, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_StandardWeaponCooler::NounEnhancement_StandardWeaponCooler()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,15));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,-15));
}

IMPLEMENT_FACTORY( NounEnhancement_StandardWeaponMultiplexer, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_StandardWeaponMultiplexer, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_StandardWeaponMultiplexer::NounEnhancement_StandardWeaponMultiplexer()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,15));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,15));
}

IMPLEMENT_FACTORY( NounEnhancement_StandardWeaponCondenser, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_StandardWeaponCondenser, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_StandardWeaponCondenser::NounEnhancement_StandardWeaponCondenser()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,-15));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,-15));
}

// Improved Weapon ---------------------------------------------------------------//
IMPLEMENT_FACTORY( NounEnhancement_ImprovedWeaponAccelerator, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_ImprovedWeaponAccelerator, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_ImprovedWeaponAccelerator::NounEnhancement_ImprovedWeaponAccelerator()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,20));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,-20));
}

IMPLEMENT_FACTORY( NounEnhancement_ImprovedWeaponCooler, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_ImprovedWeaponCooler, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_ImprovedWeaponCooler::NounEnhancement_ImprovedWeaponCooler()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,20));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,-20));
}

IMPLEMENT_FACTORY( NounEnhancement_ImprovedWeaponMultiplexer, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_ImprovedWeaponMultiplexer, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_ImprovedWeaponMultiplexer::NounEnhancement_ImprovedWeaponMultiplexer()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,20));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,20));
}

IMPLEMENT_FACTORY( NounEnhancement_ImprovedWeaponCondenser, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_ImprovedWeaponCondenser, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_ImprovedWeaponCondenser::NounEnhancement_ImprovedWeaponCondenser()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,-20));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,-20));
}

// Advanced Weapon ---------------------------------------------------------------//
IMPLEMENT_FACTORY( NounEnhancement_AdvancedWeaponAccelerator, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_AdvancedWeaponAccelerator, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_AdvancedWeaponAccelerator::NounEnhancement_AdvancedWeaponAccelerator()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,25));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,-25));
}

IMPLEMENT_FACTORY( NounEnhancement_AdvancedWeaponCooler, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_AdvancedWeaponCooler, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_AdvancedWeaponCooler::NounEnhancement_AdvancedWeaponCooler()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,25));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,-25));
}

IMPLEMENT_FACTORY( NounEnhancement_AdvancedWeaponMultiplexer, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_AdvancedWeaponMultiplexer, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_AdvancedWeaponMultiplexer::NounEnhancement_AdvancedWeaponMultiplexer()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,25));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,25));
}

IMPLEMENT_FACTORY( NounEnhancement_AdvancedWeaponCondenser, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_AdvancedWeaponCondenser, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_AdvancedWeaponCondenser::NounEnhancement_AdvancedWeaponCondenser()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,-25));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,-25));
}

// Enhanced Weapon ---------------------------------------------------------------//
IMPLEMENT_FACTORY( NounEnhancement_EnhancedWeaponAccelerator, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_EnhancedWeaponAccelerator, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_EnhancedWeaponAccelerator::NounEnhancement_EnhancedWeaponAccelerator()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,30));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,-30));
}

IMPLEMENT_FACTORY( NounEnhancement_EnhancedWeaponCooler, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_EnhancedWeaponCooler, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_EnhancedWeaponCooler::NounEnhancement_EnhancedWeaponCooler()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,30));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,-30));
}

IMPLEMENT_FACTORY( NounEnhancement_EnhancedWeaponMultiplexer, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_EnhancedWeaponMultiplexer, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_EnhancedWeaponMultiplexer::NounEnhancement_EnhancedWeaponMultiplexer()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,30));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,30));
}

IMPLEMENT_FACTORY( NounEnhancement_EnhancedWeaponCondenser, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_EnhancedWeaponCondenser, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_EnhancedWeaponCondenser::NounEnhancement_EnhancedWeaponCondenser()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,-30));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,-30));
}

// Uniques
IMPLEMENT_FACTORY( NounEnhancement_ZlygsWeaponAugmentation, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_ZlygsWeaponAugmentation, NounEnhancement )
END_PROPERTY_LIST();

NounEnhancement_ZlygsWeaponAugmentation::NounEnhancement_ZlygsWeaponAugmentation()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,5));
	m_enhancements.push_back(new Enhancement(ES_BEAM,MT_RANGE,5));

	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,5));
	m_enhancements.push_back(new Enhancement(ES_BEAM,MT_DAMAGE,5));

	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_ENERGY,10));
	m_enhancements.push_back(new Enhancement(ES_BEAM,MT_ENERGY,10));

}

// Uniques
IMPLEMENT_FACTORY( NounEnhancement_ThariWeaponBooster, NounEnhancement );
BEGIN_ABSTRACT_PROPERTY_LIST( NounEnhancement_ThariWeaponBooster, NounEnhancement )
END_PROPERTY_LIST();


NounEnhancement_ThariWeaponBooster::NounEnhancement_ThariWeaponBooster()
{
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_RANGE,10));
	m_enhancements.push_back(new Enhancement(ES_BEAM,MT_RANGE,10));

	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_DAMAGE,5));
	m_enhancements.push_back(new Enhancement(ES_BEAM,MT_DAMAGE,5));

	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,10));
	m_enhancements.push_back(new Enhancement(ES_WEAPON,MT_COOLDOWN,10));

}

